Expanded memory

In DOS memory management, expanded memory is a system of bank switching introduced April 24, 1985[1] that provided additional memory to DOS programs beyond the limit of conventional memory. Expanded memory uses parts of the address space normally dedicated to communication with peripherals for program memory as well. The practice is outlined in the Expanded Memory Specification (EMS), which was developed jointly by Lotus Software, Intel, and Microsoft, so that this specification was sometimes referred to as "LIM EMS." The use of expanded memory became common with games and business programs in the late 1980s through the mid-1990s, but its use declined as users switched from DOS to 32-bit operating systems such as Microsoft Windows.

Contents

Overview

The 8088 processor of the IBM PC and XT could address one megabyte of memory in real mode. The designers allocated the lower 640 KiB of address space for read-write program memory (RAM), called "conventional memory", and the remaining 384 KiB of memory space was reserved for uses such as the system BIOS, video memory, and memory on expansion peripheral boards. The IBM AT, which used an Intel 80286, supported protected mode, but it also ran DOS, a real mode operating system that did not use extended memory directly.

To fit potentially much more memory than the 384 KiB of free address space would allow, a bank switching scheme was devised, where only selected parts of the additional memory would be accessible at the same time. Originally, a single 64 KiB window of memory was possible; later this was made more flexible. Programs had to be written in a specific way to access expanded memory.

Details

An expanded memory board, being a hardware peripheral, needed a software device driver, which exported its services. Such a device driver was called expanded memory manager. Its name was variable; the previously mentioned boards used remm.sys (AST), ps2emm.sys (IBM), aemm.sys (AT&T) and emm.sys (Intel) respectively. Later, the expression became associated with software-only solutions requiring the 80386 processor, for example Quarterdeck's QEMM.

Expanded memory was a common term for several incompatible technology variants. EEMS, an expanded memory management standard competing with LIM EMS, was developed by AST Research, Quadram and Ashton-Tate. It allowed to also remap some or all of the lower 1024 KiB of memory not associated with interrupts or dedicated I/O memory (such as network or video cards), so that entire programs could be switched in and out of the extra RAM. This feature was used by early DOS multitasker software such as Desqview. The two standards were eventually combined as LIM EMS 4.0.

Implementations

Expansion boards

This insertion of a memory window into the peripheral address space could originally be accomplished only through specific expansion boards, plugged into the ISA expansion bus of the computer. Famous 1980s expanded memory boards were AST RAMpage, IBM PS/2 80286 Memory Expansion Option, AT&T Expanded Memory Adapter and the Intel Above Board. Given the price of RAM during the period, up to several hundred dollars per MiB, and the quality and reputation of the above brand names, an expanded memory board was very expensive.

Motherboard chipsets

Later, some motherboard chipsets of Intel 80286-based computers implemented an expanded memory scheme that did not require add-on boards, notably the NEAT chipset. Typically, software switches determined how much memory should be used as expanded memory and how much should be used as extended memory.

Software emulation

Beginning in 1987, the built-in memory management features of Intel 80386 processor freely modeled the address space when running legacy real mode software, making hardware solutions unnecessary. Expanded memory could be simulated in software.

The first software expanded memory management (emulation) program was CEMM, available in November 1987 with Compaq DOS 3.31. A popular and well-featured commercial solution was Quarterdeck's QEMM. A contender was Qualitas' 386MAX. Functionality was later incorporated into MS-DOS 4.01 in 1989 and into DR-DOS 5.0 in 1990, as EMM386.

Software expanded memory managers in general offered additional, but closely related functionality. Notably, they could create ordinary memory in unused parts of the upper memory area (UMA) (the high 384 KiB of real mode address space) called upper memory blocks (UMBs) and provided tools for loading small programs, typically TSRs inside ("loadhi" or "loadhigh").

Interaction between extended memory, expanded memory emulation and DOS extenders ended up being regulated by the XMS, Virtual Control Program Interface (VCPI) and DOS Protected Mode Interface (DPMI) specifications.

Certain emulation programs, colloquially known as LIMulators, did not rely on motherboard or 80386 features at all. Instead, they reserved 64 KiB of the base RAM for the expanded memory window, where they copied data to and from either extended memory or the hard disk when application programs requested page switches. This was programmatically easy to implement, but performance was low. This technique was offered by AboveDisk from Above Software and by several shareware programs.

See also

References

  1. ^ New 1-2-3 Gets 4 Megabytes of Memory, Lotus, Intel Break PC-DOS Memory Barrier, InfoWorld, Apr 29, 1985

This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.